#include <iostream>
#include <vector>
#include <queue>

struct TreeNode
{
    int val;
    TreeNode* left;
    TreeNode* right;

    TreeNode(int val) :val(val), left(nullptr), right(nullptr) {}
};

class Solution {
public:
    std::vector<int> rightSideView(TreeNode* root) {
        if(root == nullptr)
            return {};

        std::queue<TreeNode*> q;
        q.push(root);

        //保存层序遍历的数组
        std::vector<std::vector<int>> vv;
        //层序遍历
        while(!q.empty())
        {
            //记录以下该层有多少个节点数据
            int size = q.size();
            //存放每一层的数组,直接将数组插入到ret中就可以了
            //不用对ret就行初始化，也不用使用变量控制当前所在层数了
            std::vector<int> level;
            for(int i = 0; i < size; i++)
            {
                //一次将size个节点都取出来,放入到数组中
                TreeNode* node = q.front();
                level.push_back(node->val);
                q.pop();
                if(node->left != nullptr)
                    q.push(node->left);
                if(node->right != nullptr)
                    q.push(node->right);
            }
            vv.push_back(level);
        }
        //取出每一层的最后一个元素
        std::vector<int> ret;
        for(auto nums : vv)
        {
            ret.push_back(nums.back());
        }
        return ret;
    }
};